package br.com.inner.action;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;

import br.com.inner.custom.CustomException;
import br.com.inner.modelo.Job;
import br.com.inner.modelo.JobEmpresa;
import br.com.inner.modelo.Status;
import br.com.inner.modelo.StatusJob;
import br.com.inner.modelo.TipoUsuario;
import br.com.inner.modelo.Usuario;
import br.com.inner.service.UsuarioDaoService;
import br.com.inner.service.UsuarioService;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport implements ServletRequestAware {

	private static UsuarioService catUsuario = new UsuarioDaoService();
	private Usuario usuario;
	private HttpServletRequest request;
	
	List<JobEmpresa> jobsEmpresa;
	List<JobEmpresa> temp;
	List<Job> jobsEnviados;
	
	public List<JobEmpresa> getJobsEmpresa() {
		return jobsEmpresa;
	}

	public void setJobsEmpresa(List<JobEmpresa> jobs) {
		this.jobsEmpresa = jobs;
	}
	
	public List<Job> getJobsEnviados() {
		return jobsEnviados;
	}

	public void setJobsEnviados(List<Job> jobs) {
		this.jobsEnviados = jobs;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String doLogin() throws CustomException{
		HttpSession s = request.getSession(true);
		usuario = catUsuario.verificaSenhaUsuario(usuario.getNmUsuario(), usuario.getPassUsuario());
		if(usuario != null){
			System.out.println("O usuario != null");
			if(usuario.getStatusUsuario().equals(Status.INATIVO)){
				System.out.println("Usuario Inativo");
				addActionError(getText("errors.login.usuario.inativo"));
				return ERROR;
			}else{
				s.setAttribute("nmUsuario", usuario.getNmUsuario());
				s.setAttribute("cdUsuario", usuario.getCdUsuario());
				Usuario usu = catUsuario.getUsuario(usuario.getCdUsuario());
				if(!TipoUsuario.ADMINISTRADOR.equals(usu.getTipoUsuario())){
					System.out.println("Usuario != de Administrador");
					System.out.println("Jobs recebidos");
					//temp = new ArrayList<JobEmpresa>();
					/*jobsEmpresa = usu.getEmpresa().getJobs();
					temp = new ArrayList<JobEmpresa>();
					for (JobEmpresa lista : jobsEmpresa) {
						System.out.println("Job: "+lista.getJob().getTitulo());
						if(!lista.getStatus().equals(StatusJob.DESATIVADO)){
							System.out.println("Entrou no if o Job: "+lista.getJob().getTitulo());
							temp.add(lista);
						}
					}*/
					temp = catUsuario.listarRecebidos(usuario.getCdUsuario());
					if(temp.size() >= 6){
						temp = temp.subList(0, 6);
					}else{
						temp = temp.subList(0, temp.size());
					}
					s.setAttribute("jobsEmpresa", temp);
					System.out.println("Setou no jobsEmpresa");
					jobsEnviados = catUsuario.listarEnviados(usuario.getCdUsuario());
					if(jobsEnviados.size() >= 6){
						jobsEnviados = jobsEnviados.subList(0, 6);
					}else{
						jobsEnviados.subList(0, jobsEnviados.size());
					}
					s.setAttribute("jobsEnviados", jobsEnviados);
				}
				return SUCCESS;
			}
		}else{
			System.out.println("Senha errada");
			addActionError(getText("errors.login.ususen.errada"));
			return ERROR;
		}
	}
	
	public String doInput(){
		return INPUT;
	}
	
	public String doLogout(){
		HttpSession s = request.getSession(false);
		s.invalidate();
		return INPUT;
	}
	
	public String doPrincipal() throws CustomException{
		HttpSession s = request.getSession(true);
		BigDecimal cdUsuario = (BigDecimal)s.getAttribute("cdUsuario");
		Usuario usu = catUsuario.getUsuario(cdUsuario);
		System.out.println("Usuario: "+usu.getCdUsuario()+": "+usu.getNmUsuario());
		System.out.println("Jobs recebidos");
		//temp = new ArrayList<JobEmpresa>();
		/*jobsEmpresa = usu.getEmpresa().getJobs();
		temp = new ArrayList<JobEmpresa>();
		for (JobEmpresa lista : jobsEmpresa) {
			System.out.println("Job: "+lista.getJob().getTitulo());
			if(!lista.getStatus().equals(StatusJob.DESATIVADO)){
				System.out.println("Entrou no if o Job: "+lista.getJob().getTitulo());
				temp.add(lista);
			}
		}*/
		temp = catUsuario.listarRecebidos(usu.getCdUsuario());
		if(temp.size() >= 6){
			temp = temp.subList(0, 6);
		}else{
			temp = temp.subList(0, temp.size());
		}
		s.setAttribute("jobsEmpresa", temp);
		System.out.println("Setou no jobsEmpresa");
		jobsEnviados = catUsuario.listarEnviados(usu.getCdUsuario());
		if(jobsEnviados.size() >= 6){
			jobsEnviados = jobsEnviados.subList(0, 6);
		}else{
			jobsEnviados.subList(0, jobsEnviados.size());
		}
		s.setAttribute("jobsEnviados", jobsEnviados);
		return "principal";
	}


	public void setServletRequest(HttpServletRequest httpServletRequest) {
		this.request = httpServletRequest;		
	}
}
